package com.turing.common.util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
 * @author ：XiLuo
 * @date ：Created in 2019/6/3 15:58
 * @description：
 * @modified By：
 * @version: $
 */
public class MD5Utils {

    private static Base64.Encoder encoder = Base64.getEncoder();

    public static String encrypt(String text) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("md5");
            String str = byteArrayToHex(md5.digest(text.getBytes("utf-8")));

            return str;
        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return null;

    }

    public static String encrypt(byte[] bytes) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("md5");
            String str = byteArrayToHex(md5.digest(bytes));

            return str;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        return null;

    }

    private static String byteArrayToHex(byte[] byteArray) {
        // 首先初始化一个字符数组，用来存放每个16进制字符
        char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

        // new一个字符数组，这个就是用来组成结果字符串的（解释一下：一个byte是八位二进制，也就是2位十六进制字符（2的8次方等于16的2次方））
        char[] resultCharArray = new char[byteArray.length * 2];

        // 遍历字节数组，通过位运算（位运算效率高），转换成字符放到字符数组中去
        int index = 0;

        for (byte b : byteArray) {
            resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];
            resultCharArray[index++] = hexDigits[b & 0xf];
        }

        // 字符数组组合成字符串返回
        return new String(resultCharArray);
    }

    public static void main(String[] args) {
        String pwd = encrypt("123456");
        System.out.println(pwd);
    }
}
